package com.atguigu.yygh.utlis;

import com.atguigu.yygh.Exception.YyghException;
import com.atguigu.yygh.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * 统一异常处理类
 */
@ControllerAdvice//通知,利用springAop通知
@Slf4j //开启日志
public class GlobalExceptionHandler {
    //处理全局异常
    @ExceptionHandler(Exception.class)//该注解: 异常处理器,当发生了该异常就会执行该方法
    @ResponseBody//如果不加这个注解,就不会响应到前段
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }

    //处理特定异常
    @ExceptionHandler(ArithmeticException.class)//ArithmeticException为指定的异常,只有发生该异常,才会执行该方法
    @ResponseBody
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了特定异常");
    }

    //处理自定义的异常
    @ExceptionHandler(YyghException.class)
    @ResponseBody
    public R error(YyghException e){
        log.error(e.getMessage());//在控制台打印日志 Slf4j 内的方法
        e.printStackTrace();
        return R.error().message(e.getMsg()).code(e.getCode());
    }
}
